package com.mtons.mblog.base.lang;

import java.util.HashMap;
import java.util.Map;

/**
 * 记忆类型
 */
public enum MemoryType {
    /**
     * 第0个记忆周期：5分钟
     */
    MEMORY_00("第零次复习", "5分钟", "00", 5 * 60),
    /**
     * 第1个记忆周期：30分钟
     */
    MEMORY_01("第一次复习", "30分钟", "01", 30 * 60),
    /**
     * 第2个记忆周期：12小时
     */
    MEMORY_02("第二次复习", "12小时", "02", 12 * 3600),
    /**
     * 第3个记忆周期：1天
     */
    MEMORY_03("第三次复习", "24小时", "03", 24 * 3600),
    /**
     * 第4个记忆周期：2天
     */
    MEMORY_04("第四次复习", "48小时", "04", 2 * 24 * 3600),
    /**
     * 第5个记忆周期：4天
     */
    MEMORY_05("第五次复习", "4天", "05", 4 * 24 * 3600),
    /**
     * 第6个记忆周期：7天
     */
    MEMORY_06("第六次复习", "7天", "06", 7 * 24 * 3600),
    /**
     * 第7个记忆周期：15天
     */
    MEMORY_07("第七次复习", "15天", "07", 15 * 24 * 3600),
    /**
     * 第8个记忆周期：30天
     */
    MEMORY_08("第八次复习", "30天", "08", 30 * 24 * 3600),
    /**
     * 第十个记忆周期：60天
     */
    MEMORY_09("第九次复习", "60天", "09", 60 * 24 * 3600),
    /**
     * 第十一个记忆周期：120天
     */
    MEMORY_10("第十次复习", "120天", "10", 120 * 24 * 3600);

    private String name;
    private String timeShow;
    private String type;
    private long seconds;

    MemoryType(String name, String timeShow, String type, long seconds) {
        this.name = name;
        this.timeShow = timeShow;
        this.type = type;
        this.seconds = seconds;
    }

    public String getName() {
        return name;
    }

    public String getTimeShow() {
        return timeShow;
    }

    public String getType() {
        return type;
    }

    public long getSeconds() {
        return seconds;
    }

    @Override
    public String toString() {
        return "MemoryType{" +
                "name='" + name + '\'' +
                ", timeShow='" + timeShow + '\'' +
                ", type='" + type + '\'' +
                ", seconds=" + seconds +
                '}';
    }

    private static Map<String, MemoryType> memoryTypes = new HashMap<String, MemoryType>(12) {
        {
            put(MEMORY_00.type, MEMORY_00);
            put(MEMORY_01.type, MEMORY_01);
            put(MEMORY_02.type, MEMORY_02);
            put(MEMORY_03.type, MEMORY_03);
            put(MEMORY_04.type, MEMORY_04);
            put(MEMORY_05.type, MEMORY_05);
            put(MEMORY_06.type, MEMORY_06);
            put(MEMORY_07.type, MEMORY_07);
            put(MEMORY_08.type, MEMORY_08);
            put(MEMORY_09.type, MEMORY_09);
            put(MEMORY_10.type, MEMORY_10);
        }
    };

    public static MemoryType getMemoryByOrdinal(int index) {
        MemoryType[] values = MemoryType.values();
        return values[index];
    }

    public static MemoryType getMemoryByType(String type) {
        return memoryTypes.get(type);
    }
}
